package leetcode_滑动窗口;

import java.util.HashMap;
import java.util.Map;

/**
 * 无重复字符的最长子串
 * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
 * <p>
 * 算法：滑动窗口
 *
 * @author yzh
 * @version 1.0
 * @date 2022/5/9 10:58
 */
public class _3 {

    public int lengthOfLongestSubstring_new(String s) {
        int ans = 0;
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0, j = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (map.containsKey(c)) j = Math.max(j, map.get(c) + 1);
            ans = Math.max(ans, i - j + 1);
            map.put(c, i);
        }
        return ans;
    }

    public int lengthOfLongestSubstring(String s) {
        int len = s.length();
        if (len == 0) return 0;
        int ans = 1;
        Map<Character, Integer> map = new HashMap<>();
        for (int l = 0, r = 0; r < len; r++) {
            char c = s.charAt(r);
            if (map.containsKey(c)) l = Math.max(l, map.get(c) + 1);
            map.put(c, r);
            ans = Math.max(ans, r - l + 1);
        }
        return ans;
    }

}
